package com.itheima.java.ai.langchin4j.service;

import org.springframework.stereotype.Service;
import java.util.Arrays;
import java.util.List;
import java.util.Random;

@Service
public class MockAiService {
    
    private final Random random = new Random();
    
    // 预设的智能回复模板
    private final List<String> healthResponses = Arrays.asList(
        "根据您的描述，建议您注意休息，保持良好的作息习惯。如果症状持续，请及时就医。",
        "您的健康状况需要关注，建议定期体检，保持健康的生活方式。",
        "感谢您的咨询，建议您多喝水，适当运动，如有不适请及时联系医生。"
    );
    
    private final List<String> appointmentResponses = Arrays.asList(
        "我可以帮您查询可预约的科室和医生。请告诉我您需要挂哪个科室？",
        "预约挂号服务已为您开启，请提供您的就诊需求，我来为您安排合适的医生。",
        "北京协和医院为您提供便民挂号服务，请说明您的症状，我来推荐合适的科室。"
    );
    
    private final List<String> generalResponses = Arrays.asList(
        "您好！我是北京协和医院的智能医疗助手小智，很高兴为您服务。请问有什么可以帮助您的吗？",
        "感谢您使用北京协和医院智能医疗服务，我会尽力为您提供专业的医疗咨询。",
        "作为您的医疗助手，我可以为您提供健康咨询、预约挂号、就诊指导等服务。"
    );
    
    /**
     * 根据用户消息生成模拟AI回复
     * @param userMessage 用户输入的消息
     * @return 模拟的AI回复
     */
    public String generateResponse(String userMessage) {
        if (userMessage == null || userMessage.trim().isEmpty()) {
            return "请问有什么可以帮助您的吗？";
        }
        
        String message = userMessage.toLowerCase();
        
        // 根据关键词选择合适的回复类型
        if (containsHealthKeywords(message)) {
            return getRandomResponse(healthResponses);
        } else if (containsAppointmentKeywords(message)) {
            return getRandomResponse(appointmentResponses);
        } else {
            return getRandomResponse(generalResponses);
        }
    }
    
    /**
     * 检查是否包含健康相关关键词
     */
    private boolean containsHealthKeywords(String message) {
        String[] healthKeywords = {"症状", "疼痛", "发烧", "咳嗽", "头痛", "胃痛", "健康", "体检", "药物", "治疗"};
        for (String keyword : healthKeywords) {
            if (message.contains(keyword)) {
                return true;
            }
        }
        return false;
    }
    
    /**
     * 检查是否包含预约相关关键词
     */
    private boolean containsAppointmentKeywords(String message) {
        String[] appointmentKeywords = {"预约", "挂号", "医生", "科室", "就诊", "看病", "门诊", "专家"};
        for (String keyword : appointmentKeywords) {
            if (message.contains(keyword)) {
                return true;
            }
        }
        return false;
    }
    
    /**
     * 从回复列表中随机选择一个回复
     */
    private String getRandomResponse(List<String> responses) {
        return responses.get(random.nextInt(responses.size()));
    }
    
    /**
     * 模拟流式响应，将回复分段返回
     * @param response 完整回复
     * @return 分段的回复列表
     */
    public List<String> getStreamingResponse(String response) {
        // 将回复按句号分割，模拟流式输出
        String[] sentences = response.split("[。！？]");
        return Arrays.asList(sentences);
    }
}